<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <h5>原型链继承</h5>
  <p>缺点：
    1、无法向父类构造函数传参；
    2、父类的所有属性被共享，只要一个实例修改了属性，其他所有的子类实例都会被影响
  </p>
  <script>
    function Animal(name) {
      // 属性
      this.name = name;
      // 实例方法, 挂在在自己本身下面
      this.sleep = function () {
        console.log(`${this.name}正在睡觉`);
      }
    }

    Animal.prototype.eat = function (food) {
      console.log(`${this.name}正在吃${food}`);
    }

    function Dog() {
      this.bark = function () {
        console.log('bark')
      }
    }


    Dog.prototype = new Animal() // 这里实现继承：高级构造函数的实例赋值给低级构造函数的原型
    Dog.prototype.name = '果冻'

    Dog.test = function () {
      console.log('test');
    }

    var dog = new Dog()
    console.dir(dog)

    window.dog = dog;

    console.log(dog instanceof Dog); // true
    console.log(dog instanceof Animal); // true

  </script>

</body>

</html>